'\"! tbl | mmdoc
'\"macro stdmacro
.\"
.\" Copyright (c) 2014,2019 Red Hat.
.\"
.\" This program is free software; you can redistribute it and/or modify it
.\" under the terms of the GNU General Public License as published by the
.\" Free Software Foundation; either version 2 of the License, or (at your
.\" option) any later version.
.\"
.\" This program is distributed in the hope that it will be useful, but
.\" WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
.\" or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
.\" for more details.
.\"
.TH PMGETOPT 1 "PCP" "Performance Co-Pilot"
.SH NAME
\f3pmgetopt\f1 \- Performance Co-Pilot shell script option parser
.SH SYNOPSIS
\f3$PCP_BINADM_DIR/pmgetopt\f1
[\f3\-u?\f1]
[\f3\-c \f2file\f1]
[\f3\-p \f2name\f1]
[\f3\-\-\f1]
[\f2parameters\f1]
.SH DESCRIPTION
.de EX
.in +0.5i
.ie t .ft CB
.el .ft B
.ie t .sp .5v
.el .sp
.ta \\w' 'u*8
.nf
..
.de EE
.fi
.ie t .sp .5v
.el .sp
.ft R
.in
..
.B pmgetopt
is used to perform command line option parsing for shell scripts
used in the Performance Co-Pilot (PCP toolkit).
It is also used to generate usage messages for those scripts.
.PP
The parameters given to
.B pmgetopt
take two forms: initially, options specific to
.B pmgetopt
itself are passed in, and terminated using the \-\- mechanism.
Thereafter, all of the parameters passed into the shell script
should be passed (usually this is simply the "$@" variable).
.SH OPTIONS
The available command line options are:
.TP 5
\f3\-c\f1=\f2file\f1, \f3\-\-config\f1=\f2file\f1
A configuration
.I file
in the format described below is passed to
.B pmconfig
using this option.
If this option is omitted, then
.B pmconfig
will read its configuration from the standard input stream.
.TP
\f3\-p\f1=\f2name\f1, \f3\-\-progname\f1=\f2name\f1
When parsing the calling shell scripts parameters, error and usage
messages will contain the given program
.I name
rather than referring to
.B pmgetopt
itself as the source of the error.
.TP
\f3\-u\f1, \f3\-\-usage\f1
A usage message appropriate for the calling shell script to
present as its own can be generated using the
option.
.TP
\fB\-?\fR, \fB\-\-help\fR
Display the usage message for
.B pmgetopt
itself and exit.
.PP
.B pmgetopt
parses the given parameters, and produces output in a format
suitable for sourcing in the calling shell script.
When both short and long forms of an argument are allowed by
the specification,
.B pmgetopt
will always indicate the short form for simpler shell processing.
If arguments are presented that do not match the configuration,
a request for a usage message (\-?) will be generated for the
calling script to respond to.
Any non-option parameters will be echoed back to the calling
script preceded by the double-hyphen delimiter.
Thus a script should stop handling options when this delimiter
is detected, and begin the handling of any non-option arguments.
.PP
Unlike with the shell built-in
.I getopt
command, variables like $OPTARG are
not set and the calling script will typically employ use of the
shell built-in
.IR eval ,
.I set
and positional
.I shift
commands to ensure option processing occurs correctly.
.SH CONFIGURATION
The configuration format used by
.B pmgetopt
is intended to closely reflect the usage message which would be
generated in the presence of invalid arguments (or the
\f3\-?\f1, \f3\-\-help\f1 option).
.PP
There are primarily two types of configuration line \- commands
and options.
Commands allow metadata to be passed into the option processing
process, and options are the allowable command line options that
the shell script will accept.
Command lines are preceded by the hash character, whereas option
lines will always begin with a hyphen (either single or double).
Any other line in the configuration, which may include usage headers
or descriptive text, has no impact on the option parsing and will be
copied unmodified into the usage message.
.PP
The set of commands is:
.I getopt
(provide short-argument option specification manually,
if not present this will be generated from the options presented),
.I usage
(provide short one-line summary used at the head of the
usage message, which will be prefixed by the
.I progname
before reporting), and
.I end
which informs
.B pmgetopt
to stop processing further commands and options \- any subsequent
text encountered will be simply appended to the usage message.
.PP
A short-hand notation exists for each of the standard PCP options,
as described in
.BR PCPIntro (1).
If any of these options (e.g \f3\-\-host\f1) appears as a single word on
any line, it will be transformed into the appropriate option for the
shell script, including all metadata about that option (whether it
accepts an argument, both short and long option forms, and so on).
.PP
Use of the equals symbol ("=") indicates the presence of a required
argument to any option, for both short and long forms.
Any non-standard option must be accompanied by a non-empty description
of that argument.
.SH EXAMPLES
As an example, the following is a valid configuration:
.EX
# Usage: [options] node...

Options:
    \-\-archive
    \-d, \-\-delay            pause between updates for archive replay
    \-\-host
    \-\-interval
    \-i=INST, \-\-insts=INST  comma-separated metrics instance list
    \-r                     output raw counters (no rate conversion)
    \-\-width=N              set the width of each column of output
    \-\-timezone
    \-\-help
.EE
.PP
This configuration will produce the following usage message,
when run as shown.
.EX
$ pmgetopt \-\-usage \-\-progname=clusterstat \-\- "$@"
Usage: clusterstat [options] node...

Options:
  \-a FILE, \-\-archive=FILE
                        metrics source is a PCP log archive
  \-d, \-\-delay           pause between updates for archive replay
  \-h HOST, \-\-host=HOST  metrics source is PMCD on host
  \-t DELTA, \-\-interval=DELTA
                        sampling interval
  \-i INST, \-\-insts=INST comma-separated metrics instance list
  \-r                    output raw counters (no rate conversion)
  \-\-width=N             set the width of each column of output
  \-Z TZ, \-\-timezone=TZ  set reporting timezone
  \-?, \-\-help            show this usage message and exit
.EE
.PP
Several examples of
.B pmgetopt
use form part of the PCP toolkit, in particular the
.BR pcp (1)
and
.BR pmlogmv (1)
scripts provide good reference examples.
.SH PCP ENVIRONMENT
Environment variables with the prefix \fBPCP_\fP are used to parameterize
the file and directory names used by PCP.
On each installation, the
file \fI/etc/pcp.conf\fP contains the local values for these variables.
The \fB$PCP_CONF\fP variable may be used to specify an alternative
configuration file, as described in \fBpcp.conf\fP(5).
.SH SEE ALSO
.BR pcp (1),
.BR pmlogmv (1),
.BR pmgetopt_r (3),
.BR pcp.conf (5)
and
.BR pcp.env (5).
